Kontrola vytvoreni instance tridy
Otázka od: Petr Langer
23. 10. 2002 9:18
Navazuju na diskusi ohledne metody free a testovani na nil.
procedure test;
var
newForm : TForm;
begin
... kod...
*** V tomhle miste potrebuju zjistit, jesli newForm byla vytvorena (napr.
newForm := TForm.Create;) nebo ne. Jelikoz jsem ale na zacatku nedal newForm
:= nil, newForm.free mi v takovem pripade nejspise vyhuci s Exception.
end;
Lze tedy zjistit, jesli instance tridy existuje nebo je to jenom nesmyslny
ukazatel?
diky
Petr Langer
Odpovedá: Ondrej Kelle
23. 10. 2002 10:42
> Lze tedy zjistit, jesli instance tridy existuje nebo je to
> jenom nesmyslny ukazatel?
Nie. Musi to byt napisane tak, aby bolo v kazdom kroku zarucene, ze je tam
bud platny odkaz na vytvorenu instanciu, alebo nil. V praxi to znamena, vzdy
inicializovat na nil, a pri uvolnovani opet priradit nil (na to sa hodi
FreeAndNil).
Napriklad takyto pseudokod:
procedure Bla;
var
Query: TQuery;
I: Integer;
begin
Query := nil;
try
for I := 0 to ItemCount -1 do
if Items[I].SomeCondition then
begin
if not Assigned(Query) then
begin
Query := TQuery.Create(nil);
Query.Database := MyDataBase;
Query.SQL.Text := MySQLText;
Query.Prepare;
end;
Query.Params[0].AsInteger := Items[I].MyInteger;
...
Query.Open;
while not Query.EOF do
begin
...
Query.Next;
end;
end;
finally
FreeAndNil(Query);
end;
end;
HTH
TOndrej